package org.jypj.dev.service.impl;


import java.util.*;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.jypj.dev.model.Road;
import org.jypj.dev.dao.IRoadDao;
import org.jypj.dev.service.IRoadService;
import org.jypj.dev.util.Page;

@Service("roadService")
public class RoadServiceImpl implements IRoadService {

    @Resource
    private IRoadDao roadDao;

    /**
     * 保存
     * 字段为空的不存防止覆盖存在默认值的字段
     *
     * @param road
     * @return 保存后的对象包括ID
     */
    public int saveRoadByField(Road road) {
        String uuid = UUID.randomUUID().toString().replace("-", "").trim();
        road.setId(uuid);
        return roadDao.saveRoadByField(road);
    }

    /**
     * 保存
     * 所有字段全都保存
     *
     * @param road
     * @return 保存后的对象包括ID
     */
    public int saveRoad(Road road) {
        String uuid = UUID.randomUUID().toString().replace("-", "").trim();
        road.setId(uuid);
        return roadDao.saveRoad(road);
    }

    /**
     * 根据ID删除
     *
     * @param id 主键ID
     * @return 删除记录数
     */
    public int deleteRoadById(String id) {

        return roadDao.deleteRoadById(id);
    }

    /**
     * 根据对象删除
     *
     * @param id 主键ID
     * @return
     */
    public int deleteRoadByObject(Road road) {

        return roadDao.deleteRoadByObject(road);
    }

    /**
     * 更新
     * 只更新值不为空的字段
     *
     * @param road
     * @return 保存后的对象包括ID
     */
    public int updateRoadByField(Road road) {

        return roadDao.updateRoadByField(road);
    }

    /**
     * 更新
     * 更新所有字段
     *
     * @param road
     * @return 保存后的对象包括ID
     */
    public int updateRoad(Road road) {

        return roadDao.updateRoad(road);
    }

    /**
     * 按ID查询
     *
     * @return Road
     * @parm id 主键ID
     */
    public Road selectRoadById(String id) {

        return roadDao.selectRoadById(id);
    }

    /**
     * 分页查询 包含条件
     *
     * @param page 分页对象
     * @param map  查询条件
     * @return List<Road>
     */
    public Page selectOnePageByMap(Page page, Map<String, Object> map) {
        List<Road> roads = roadDao.selectOnePageByMap(page, map);
        if (roads != null && roads.size() > 0) {
            page.setResult(roads);
        } else {
            page.setResult(new ArrayList<Road>());
        }
        return page;
    }

    /**
     * 分页查询 包含对象条件
     *
     * @param page 分页对象
     * @param road 查询条件
     * @return Page
     */
    public Page selectOnePageByRoad(Page page, Road road) {
        List<Road> roads = roadDao.selectOnePageByRoad(page, road);
        if (roads != null && roads.size() > 0) {
            page.setResult(roads);
        } else {
            page.setResult(new ArrayList<Road>());
        }
        return page;
    }

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<Road>
     */
    public List<Road> selectAllTreeData(Map<String, Object> map) {
        return roadDao.selectAllTreeData(map);
    }

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<Road>
     */
    public List<Road> selectAllByMap(Map<String, Object> map) {
        return roadDao.selectAllByMap(map);
    }

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<Road>
     */
    public Map<String, Road> selectAllToMapByMap(Map<String, Object> map) {
        Map<String, Road> roadMap = new LinkedHashMap<>();
        List<Road> roads = roadDao.selectAllByMap(map);
        for (Road road : roads) {
            roadMap.put(road.getId(), road);
        }
        return roadMap;
    }


    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<Road>
     */
    public List<Road> selectAllByRoad(Road road) {

        return roadDao.selectAllByRoad(road);
    }

    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return Road
     */
    public Road selectObjectByMap(Map<String, Object> map) {

        return roadDao.selectObjectByMap(map);
    }

    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return Road
     */
    public Road selectObjectByRoad(Road road) {

        return roadDao.selectObjectByRoad(road);
    }
}